//package com.eastfair.security.encrypt;
//
//import lombok.extern.slf4j.Slf4j;
//
//import javax.servlet.ReadListener;
//import javax.servlet.ServletInputStream;
//import javax.servlet.ServletRequest;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequestWrapper;
//import java.io.*;
//import java.nio.charset.StandardCharsets;
//import java.util.Enumeration;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Vector;
//
///**
// * @version 1.0
// * @date 2021/12/16 14:42
// */
//@Slf4j
//public class RequestWrapper extends HttpServletRequestWrapper {
//    private Map<String, String[]> params = new HashMap<>();
//
//    private byte[] body;
//
//    public RequestWrapper(HttpServletRequest request) {
//        super(request);
//        body = getBodyString(request).getBytes(StandardCharsets.UTF_8);
//        //将参数表，赋予给当前的Map以便于持有request中的参数
//        this.params.putAll(request.getParameterMap());
//
//    }
//
//
//
//    /**
//     * 在获取所有的参数名,必须重写此方法，否则对象中参数值映射不上
//     *
//     * @return
//     */
//    @Override
//    public Enumeration<String> getParameterNames() {
//        return new Vector<>(params.keySet()).elements();
//    }
//
//    /**
//     * 重写getParameter方法
//     *
//     * @param name 参数名
//     * @return 返回参数值
//     */
//    @Override
//    public String getParameter(String name) {
//        String[] values = params.get(name);
//        if (values == null || values.length == 0) {
//            return null;
//        }
//        return values[0];
//    }
//
//    @Override
//    public String[] getParameterValues(String name) {
//        String[] values = params.get(name);
//        if (values == null || values.length == 0) {
//            return new String[]{};
//        }
//        return values;
//    }
//
//    /**
//     * 增加多个参数
//     *
//     * @param otherParams 增加的多个参数
//     */
//    public void addAllParameters(Map<String, Object> otherParams) {
//        for (Map.Entry<String, Object> entry : otherParams.entrySet()) {
//            addParameter(entry.getKey(), entry.getValue());
//        }
//    }
//
//    /**
//     * 增加参数
//     *
//     * @param name  参数名
//     * @param value 参数值
//     */
//    public void addParameter(String name, Object value) {
//        if (value != null) {
//            if (value instanceof String[]) {
//                params.put(name, (String[]) value);
//            } else if (value instanceof String) {
//                params.put(name, new String[]{(String) value});
//            } else {
//                params.put(name, new String[]{String.valueOf(value)});
//            }
//        }
//    }
//
//
//    @Override
//    public BufferedReader getReader() throws IOException {
//        return new BufferedReader(new InputStreamReader(getInputStream()));
//    }
//
//    /**
//     * 重写获取 输入流的方法，保证流可写可读多次
//     *
//     * @return ServletInputStream
//     * @throws IOException IO异常
//     */
//    @Override
//    public ServletInputStream getInputStream() throws IOException {
//        final ByteArrayInputStream bs = new ByteArrayInputStream(body);
//        return new ServletInputStream() {
//            @Override
//            public boolean isFinished() {
//                return false;
//            }
//
//            @Override
//            public boolean isReady() {
//                return false;
//            }
//
//            @Override
//            public void setReadListener(ReadListener readListener) {
//                log.info(readListener.toString());
//            }
//
//            @Override
//            public int read() throws IOException {
//                return bs.read();
//            }
//        };
//    }
//
//    public byte[] getBody() {
//        return body;
//    }
//
//    public void setBody(byte[] body) {
//        this.body = body;
//    }
//
//    public static String getBodyString(ServletRequest request) {
//        StringBuilder sb = new StringBuilder();
//        try (
//                InputStream inputStream = request.getInputStream();
//                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
//        ) {
//            String line;
//            while ((line = reader.readLine()) != null) {
//                sb.append(line);
//            }
//        } catch (IOException e) {
//            log.error("getBodyString IOException", e);
//        }
//        return sb.toString();
//    }
//
//}
